package cn.bugstack.mybatis.type;

import java.util.HashMap;
import java.util.Locale;
import java.util.Map;

/**
 * description: 类型别名注册机
 * taskId：
 * <pre>
 * change history:
 * date             defect#             person                comments
 * ---------------------------------------------------------------------
 * 2024/11/27       ********         zhaochaoyue        create file
 * </pre>
 *
 * @author: zhaochaoyue
 * @date: 2024/11/27 14:33
 * @copyright: 2024
 */
public class TypeAliasRegistry {

    /**
     * key 是别名 value 是类型
     */
    private final Map<String,Class<?>> TYPE_ALIASES = new HashMap<>();

    public TypeAliasRegistry() {
        //引用包装类型
        registerAlias("string",String.class);
        //基本包装类型
        registerAlias("byte", Byte.class);
        registerAlias("long", Long.class);
        registerAlias("short", Short.class);
        registerAlias("int",Integer.class);
        registerAlias("integer",Integer.class);
        registerAlias("double",Double.class);
        registerAlias("float", Float.class);
        registerAlias("boolean", Boolean.class);
    }

    /**
     * 放入别名
     * @param alias 别名
     * @param value 类型class
     */
    public void registerAlias(String alias, Class<?> value) {
        String key = alias.toLowerCase(Locale.ENGLISH);
        TYPE_ALIASES.put(key,value);
    }

    /**
     * 根据别名获取类型
     * @param string 别名
     * @return 类型class
     * @param <T> 
     */
    public <T> Class<T> resolveAlias(String string) {
        String key = string.toLowerCase(Locale.ENGLISH);
        return (Class<T>)TYPE_ALIASES.get(key);
    }
    
}
